package com.itheima.a02test;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;

public class Test6 {
    public static void main(String[] args) {
        /*
            需求：统计一个文件夹中每种文件的个数并打印。（考虑子文件夹）
            打印格式如下：
            txt:3个
            doc:4个
            jpg:6个


        */

        File file = new File("C:\\aaa\\src");
        HashMap<String, Integer> map = getCount(file);
        map.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String s, Integer i) {
                System.out.println(s + ":" + i + "个");
            }
        });

    }

    public static HashMap<String, Integer> getCount(File src) {
        //定义一个集合用来统计每种文件的个数
        HashMap<String, Integer> hm = new HashMap<>();
        //1.进入文件夹
        File[] files = src.listFiles();
        //2.遍历文件夹
        for (File file : files) {
            if (file.isFile()) {
                //3.判断，果是文件
                String[] arr = file.getName().split("\\.");
                //表示文件都是有后缀的
                if (arr.length >= 2) {
                    //获取到后缀
                    String key = arr[arr.length - 1];
                    //拿着后缀到集合中进行判断
                    if (hm.containsKey(key)) {
                        //表示后缀存在
                        //拿出后缀的个数
                        int count = hm.get(key);
                        //个数+1
                        count++;
                        //再添加会集合当中
                        hm.put(key, count);
                    } else {
                        //表示后缀不存在,添加到集合当中
                        hm.put(key, 1);
                    }
                }
            } else {
                //4.判断，是文件夹就递归
                HashMap<String, Integer> sonMap = getCount(file);
                //遍历sonMap集合
                Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
                for (Map.Entry<String, Integer> entry : entries) {
                    //键表示后缀名
                    String key = entry.getKey();
                    //值表示后缀名的数量
                    int value = entry.getValue();
                    //在hm集合当中判断是否存在这个后缀名
                    if (hm.containsKey(key)) {
                        //存在
                        int count = hm.get(key);
                        count += value;
                        hm.put(key, count);
                    } else {
                        //不存在
                        hm.put(key, value);
                    }
                }
            }
        }
        return hm;
    }
}
